package com.zyf.chapter02.creation.factory.factory_method;

import com.zyf.chapter02.creation.factory.util.IRuleConfigParser;
import com.zyf.chapter02.creation.factory.util.InvalidRuleConfigException;
import com.zyf.chapter02.creation.factory.util.RuleConfig;

/**
 * 需求：根据配置文件的后缀（json、xml、yaml、properties），选择不同的解析器（JsonRuleConfigParse...），
 * 将存储在文件中的配置解析成内存对象
 * @author yifeng
 */
public class V2RoleConfigSource {
    public RuleConfig load(String ruleConfigFilePath) throws InvalidRuleConfigException {
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParserFactory parserFactory = RuleConfigParserFactoryMap.createParser(ruleConfigFileExtension);
        if (parserFactory == null){
            throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
        }
        // 使用工厂方法模式创建类
        IRuleConfigParser parser = parserFactory.createParser();

        String configText = "";
        // 从 ruleConfigFilePath 文件中读取文本到 configText 中
        RuleConfig ruleConfig = parser.parse(configText);
        return ruleConfig;
    }

    private String getFileExtension(String ruleConfigFilePath) {
        // 解析文件获取扩展名，比如 rule.json，返回 json
        return "json";
    }
}
